\begin{figure} 
\caption{\textbf{The \name protocol}} \label{fig:protocol}
\begin{framed}
\footnotesize

\tikzset{
    %Define standard arrow tip
    >=stealth',
    %Define style for boxes
    punkt/.style={
        rectangle,
        rounded corners,
        draw=black, very thick,
        text width=11em,
        minimum height=2em,
        text centered},
        %Define style for thin boxes
        thinpunkt/.style={
            rectangle,
            rounded corners,
            draw=black, very thick,
            text width=9em,
            minimum height=2em,
            text centered},
            %Define style for wide boxes
            widepunkt/.style={
                rectangle,
                rounded corners,
                draw=black, very thick,
                text width=13em,
                minimum height=2em,
                text centered},
                %Define style for wider boxes
                widerpunkt/.style={
                    rectangle,
                    rounded corners,
                    draw=black, very thick,
                    text width=15em,
                    minimum height=2em,
                    text centered},
                    %Define style for widest boxes
                    widestpunkt/.style={
                        rectangle,
                        rounded corners,
                        draw=black, very thick,
                        text width=20em,
                        minimum height=2em,
                        text centered},
                        % Define arrow style
                        pil/.style={
                            <-,
                            thick,
                            shorten <=2pt,
                            shorten >=2pt,}
}

\begin{tikzpicture}[node distance=1cm, auto,]
%nodes
\node[widestpunkt] (start) {1) $\user \stackrel{\text{anon}}{\longrightarrow} \mix$:\\
$\langle \mixdata \mbox{=}(\chunksize, \userpaydeadline, \warrantydeadline, \unblinddeadline, \mixpaydeadline, \confirmationdelay, \feerate), [\token \mbox{=}(\outaddr, \crsnonce, \nonce)]_{\commencfun} \rangle$};
\node[below=1.5cm of start] (dummy1) {};

\node[widepunkt, inner sep=5pt,left=0.5cm of dummy1]
(sign) {2a) $\user \stackrel{\text{anon}}{\longleftarrow} \mix$: $\left\{[\token]_{\commencfun}, \escaddr, \mixdata \right\}_{\mixprivkey}$}
edge[pil,bend left=45] node[auto, align=center] {\mix accepts terms,\\ specifies \escaddr} (start.west);

\node[below=1.5cm of start] (dummy1a) {};

\node[thinpunkt, inner sep=5pt,right=1cm of dummy1a]
(reject) {2b) $\user \stackrel{\text{anon}}{\longleftarrow} \mix$: \\ $\perp$}
edge[pil,bend right=45] node[auto] {\mix rejects terms} (start.east);

\node[below=0.5cm of reject]
(burnkey) {\user destroys $\outaddr$}
edge[pil,] (reject.south);

\node[below=2.5cm of dummy1] (dummy2) {};

\node[punkt, inner sep=5pt,left=1cm of dummy2]
(transfer) {3) \user (by time \userpaydeadline): \\ $\textbf{Transfer}\left(\chunksize, \inaddr, \escaddr \right)$}
edge[pil,] node[auto, align=center] {\user pays on time \\ (from any address)} (sign.south);

\node[above right =0.7cm of dummy2]
(forget) {\mix aborts protocol}
edge[pil] node[auto] {\user doesn't pay} (sign.south east);

\node[below=8cm of dummy2] (dummy3) {};



%% New parts of protocol

\node[punkt, inner sep=5pt, below=1cm of transfer] (broadcast) {4a) $\mix \longrightarrow public\ log$: $\left\{[\token]_{\commencfun} \right\}_{\mixprivkey}$}
edge[pil,] node[auto, align=center] {\mix broadcasts\\(by time \warrantydeadline)} (transfer.south);
\node[widerpunkt, inner sep=5pt, above right=1cm of broadcast, yshift=-1cm]
(apub1) {4b)\user publicizes: $\left\{[\token]_{\commencfun}, \escaddr, \mixdata \right\}_{\mixprivkey}$}
edge[pil] node[above right] {\mix doesn't broadcast} (transfer.east);



\node[punkt, inner sep=5pt, below=1.3cm of broadcast] (unblind) {5) $\anonuser \stackrel{\text{anon}}{\longrightarrow} public\ log$: $\{\token\}_{\mixprivkey}$}
edge[pil,] node[auto, align=center] {\anonuser unblinds output\\address anonymously\\(by time \unblinddeadline)} (broadcast.south);
\node[above right=1cm of unblind, yshift=-1cm]
(retainorreturn) {\mix retains or returns funds}
edge[pil] node[above right] {\anonuser doesn't unblind} (broadcast.east);

%% End new parts of protocol



\node[below=0.5cm of unblind]
(draw_random){$X = \crsrandfunc(\unblinddeadline, \confirmationdelay, \crsnonce)$}
edge[pil,] (unblind.south);

\node[below=0.7cm of draw_random] (dummy3a) {}
edge[pil,] node[auto] {$X > \feerate$} (draw_random.south);

\node[right=2cm of draw_random] (transacion) {\mix retains funds}
edge[pil,] node[auto] {$X \le \feerate$} (draw_random.east);

\node[punkt, inner sep=5pt,left=1cm of dummy3]
(transfer2) {6a) \mix: (by time \mixpaydeadline) \\ $\textbf{Transfer}\left(\chunksize, \escaddrprime, \outaddr\right)$}
edge[pil,] node[auto] {\mix acts honestly} (dummy3a.south);

\node[punkt, inner sep=5pt,right=0.3cm of dummy3]
(steal) {6b) No \mbox{transfer} to \outaddr by time \mixpaydeadline}
edge[pil] node[above right] {\mix steals funds} (dummy3a.south east);

\node[below=2.5cm of dummy3] (dummy4) {};

\node[left=1cm of dummy4]
(finalize) {\user, \mix destroy records}
edge[pil,] node[auto] {Protocol successful} (transfer2.south);


%% A publicizes the incriminating evidence (our modification)

\node[widepunkt, inner sep=5pt,right=0.0cm of dummy4]
(denounce) {7) \user publicizes incrimintating evidence. See Sect. \ref{subsec:protocol}, step 7}
edge[pil] node[auto] {\user detects theft (after \mixpaydeadline)} (steal.south);

\end{tikzpicture}

\normalsize 
\end{framed}
\end{figure}
